package com.kgc.basicprovider.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.kgc.basic.pojo.Store;
import com.kgc.basic.util.PageInfo;
import com.kgc.basic.util.ResponseMsg;
import com.kgc.basicprovider.dao.StoreMapper;
import com.kgc.basicprovider.service.StoreService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,rollbackFor = Exception.class)
public class StoreServiceImpl implements StoreService {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private StoreMapper storeMapper;

    @Override
    @Transactional(propagation = Propagation.SUPPORTS,isolation = Isolation.DEFAULT,rollbackFor = Exception.class)
    public ResponseMsg getStoreList(Map<String, Object> paramMap) {
        ResponseMsg msg = new ResponseMsg();
        logger.info("StoreServiceImpl getStoreList paramMap:"+paramMap);
        PageInfo<Store> pageInfo = new PageInfo<>();
        if(paramMap.containsKey("pageNo")){
            pageInfo.setPageNo(Integer.valueOf(paramMap.get("pageNo").toString()));
        }
        if(paramMap.containsKey("pageSize")){
            pageInfo.setPageSize(Integer.valueOf(paramMap.get("pageSize").toString()));
        }
        Page<Object> page = PageHelper.startPage(pageInfo.getPageNo(), pageInfo.getPageSize());
        List<Store> storeList = storeMapper.getStoreList(paramMap);
        logger.debug("StoreServiceImpl getStoreList storeList:"+storeList);
        pageInfo.setPages(page.getPages());
        pageInfo.setTotal((int)page.getTotal());
        pageInfo.setList(storeList);
        logger.debug("StoreServiceImpl getStoreList pageInfo:"+pageInfo);
        msg.setCode("200");
        msg.setData(pageInfo);
        msg.setMsg("页面查询成功");
        return msg;
    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS,isolation = Isolation.DEFAULT,rollbackFor = Exception.class)
    public ResponseMsg getAllStore() {
        ResponseMsg msg = new ResponseMsg();
        logger.info("StoreServiceImpl getAllStore start...");
        List<Store> storeList = storeMapper.getAllStore();
        logger.debug("StoreServiceImpl getAllStore storeList:"+storeList);
        msg.setCode("200");
        msg.setData(storeList);
        return msg;
    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS,isolation = Isolation.DEFAULT,rollbackFor = Exception.class)
    public ResponseMsg getStoreById(Integer id) {
        ResponseMsg msg = new ResponseMsg();
        logger.info("StoreServiceImpl getStoreById id:"+id);
        Store store = storeMapper.getStoreById(id);
        logger.debug("StoreServiceImpl getStoreById store:"+store);
        if(store==null){
            msg.setCode("201");
            msg.setMsg("没找到仓库");
            msg.setData(store);
        }else{
            msg.setCode("200");
            msg.setMsg("仓库存在");
            msg.setData(store);
        }
        logger.debug("StoreServiceImpl getStoreById msg:"+msg);
        return msg;
    }

    @Override
    public ResponseMsg addStore(Store store) {
        ResponseMsg msg = new ResponseMsg();
        store.setCreateDate(new Date());
        store.setCreateUserId(1);
        store.setUpdateDate(new Date());
        store.setUpdateUserId(1);
        logger.info("StoreServiceImpl addStore store:"+store);
        int insertCount = storeMapper.insertStore(store);
        logger.debug("StoreServiceImpl addStore insertCount:"+insertCount);
        if(insertCount>0){
            msg.setCode("200");
            msg.setMsg("添加成功");
            msg.setData(true);
        }else{
            msg.setCode("201");
            msg.setMsg("添加失败");
            msg.setData(false);
        }
        logger.debug("StoreServiceImpl addStore msg:"+msg);
        return msg;
    }

    @Override
    public ResponseMsg modifyStore(Store store) {
        ResponseMsg msg = new ResponseMsg();
        store.setCreateUserId(1);
        store.setCreateDate(store.getCreateDate());
        store.setUpdateDate(new Date());
        store.setUpdateUserId(1);
        logger.info("StoreServiceImpl modifyStore store:"+store);
        int updateCount = storeMapper.updateStore(store);
        logger.debug("StoreServiceImpl modifyStore updateCount:"+updateCount);
        if(updateCount>0){
            msg.setCode("200");
            msg.setMsg("修改成功");
            msg.setData(true);
        }else{
            msg.setCode("201");
            msg.setMsg("修改失败");
            msg.setData(false);
        }
        logger.debug("StoreServiceImpl modifyStore msg:"+msg);
        return msg;
    }

    @Override
    public ResponseMsg delStore(Integer id) {
        ResponseMsg msg = new ResponseMsg();
        logger.info("StoreServiceImpl delStore id:"+id);
        int delCount = storeMapper.delStore(id);
        logger.debug("StoreServiceImpl delStore delCount:"+delCount);
        if(delCount>0){
            msg.setCode("200");
            msg.setMsg("删除成功");
            msg.setData(true);
        }else{
            msg.setCode("201");
            msg.setMsg("删除失败");
            msg.setData(false);
        }
        logger.debug("StoreServiceImpl delStore msg:"+msg);
        return msg;
    }

    @Override
    public ResponseMsg getStoreByCode(String code) {
        ResponseMsg msg = new ResponseMsg();
        logger.info("StoreServiceImpl getStoreByCode code:"+code);
        Store store = storeMapper.getStoreByCode(code);
        logger.debug("StoreServiceImpl getStoreByCode store:"+store);
        if(store==null){
            msg.setCode("201");
            msg.setMsg("没找到仓库");
            msg.setData(store);
        }else{
            msg.setCode("200");
            msg.setMsg("仓库存在");
            msg.setData(store);
        }
        logger.debug("StoreServiceImpl getStoreByCode msg:"+msg);
        return msg;
    }

    @Override
    public ResponseMsg getStoreByName(String name) {
        ResponseMsg msg = new ResponseMsg();
        logger.info("StoreServiceImpl getStoreByName name:"+name);
        Store store = storeMapper.getStoreByName(name);
        logger.debug("StoreServiceImpl getStoreByName store:"+store);
        if(store==null){
            msg.setCode("201");
            msg.setMsg("没找到仓库");
            msg.setData(store);
        }else{
            msg.setCode("200");
            msg.setMsg("仓库存在");
            msg.setData(store);
        }
        logger.debug("StoreServiceImpl getStoreByName msg:"+msg);
        return msg;
    }
}
